import org.apache.hadoop.hive.ql.exec.UDF;

public class IdCardSexUDF extends UDF {
    // 常量内部管理类
    private static final class CONSTAINS {
        // 失败标识符
        private static final String FAILED = "false";
        // 身份证格式校验正则
        private static final String REG_IDNUMBER = "(^[1-9]\\d{5}(18|19|20)\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3}[0-9Xx]$)|(^[1-9]\\d{5}\\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\\d{3})";

    }

    /**
     * 获取性别
     * @param sfzjhm 身份证号码
     * @return 1表示男 2表示女 false表示失败，未获取到
     */
    public String evaluate(String sfzjhm) {
        if (sfzjhm != null && sfzjhm.matches(CONSTAINS.REG_IDNUMBER)){
            String sexNum = sfzjhm.substring(sfzjhm.length() - 2,sfzjhm.length() -1);
            return Integer.parseInt(sexNum) % 2 == 0 ? "2":"1";
        } else {
            return CONSTAINS.FAILED;
        }

    }
}